package br.unicamp.ic.sgct.client.aplicacao.conferencia;


import br.unicamp.ic.sgct.client.aplicacao.comum.BaseListener;
import br.unicamp.ic.sgct.client.dominio.exception.InfraException;
import br.unicamp.ic.sgct.client.dominio.to.AreaTO;
import br.unicamp.ic.sgct.client.dominio.to.ConferenciaTO;
import br.unicamp.ic.sgct.client.dominio.to.ParticipanteTO;
import br.unicamp.ic.sgct.client.dominio.to.UsuarioTO;
import java.util.List;

public interface ConferenciaListener extends BaseListener {

    public interface HandlerObterConferenciasDisponiveis {

        public void handleSucesso(List<ConferenciaTO> listTo);

        public void handleErro(Throwable caught);
    }

    /**
     *
     * @return List<ConferenciaTO>
     *
     * @throws InfraException
     * @throws Exception
     */
    public abstract void obterConferenciasDisponiveis(HandlerObterConferenciasDisponiveis handler);

    public interface HandlerListarConferenciasAbertas {

        public void handleSucesso(List<ConferenciaTO> listTo);

        public void handleErro(Throwable caught);
    }

    /**
     *
     * @return List<ConferenciaTO>
     *
     * @throws InfraException
     * @throws Exception
     */
    public abstract void listarConferenciasAbertas(HandlerListarConferenciasAbertas handler);

    public interface HandlerObterConferencia {

        public void handleSucesso(ConferenciaTO to);

        public void handleErro(Throwable caught);
    }

    /**
     *
     * @param id
     * @return
     * @throws InfraException
     * @throws Exception
     */
    public abstract void obterConferencia(long id, HandlerObterConferencia handler);

    
    public interface HandlerObterListaAreasConferencia{
        public void handleSucesso(List<AreaTO> areas);

        public void handleErro(Throwable caught);
        
    }
    //public void obterListaAreasConferencia(long id, HandlerObterListaAreasConferencia handler);

        public interface HandlerObterAreasParticipantesParticipanteConferencia{
        public void handleSucesso(List<AreaTO> areasConferencia, List<ParticipanteTO> participantesConferencia, ParticipanteTO participante);

        public void handleErro(Throwable caught);

    }


    public abstract void obterAreasParticipantesParticipanteConferencia(ConferenciaTO conferencia, HandlerObterAreasParticipantesParticipanteConferencia handler);

    public interface HandlerObterUsuarioParticipacoesAreas{
        public void handleSucesso(List<AreaTO> areasConferencia, List<UsuarioTO> participacoesConferencia, UsuarioTO usuario);

        public void handleErro(Throwable caught);

    }
    public abstract void obterUsuarioParticipacoesAreas(ConferenciaTO conferencia, HandlerObterUsuarioParticipacoesAreas handler);
}
